**************************************************************************************
	;Header frs File-linken

	IFD	Flag_project
Flag_NaturePara	set 1
	ENDC
	IFND	Flag_NaturePara
Flag_NaturePara	set 0
	ENDC
	IFEQ	Flag_NaturePara
Flag_NaturePara	set 1
	include	Nutz_project
	ELSEIF
**************************************************************************************

		rsset	Task_Buffer
Nature_CopperList1	rs.w	6*16
Nature_CopperList2	rs.w	6*16
Natur_Shifter		rs.w	224
Natur_AutoScroll	rs.w	1
Natur_CopperColor	rs.w	16		;Tabelle der Copperfarben.
Natur_Copper_TabPointer	rs.l	1
Natur_CopperHelp	rs.w	1
Natur_Copper_Buffer	rs.l	1
NFade_Struktur		rs.b	FADE_SIZEOF+71*6
Natur_Color		rs.w	1
NVBL_Handler		rs.l	1

;USplit_table		rs.b	8*8


MakeNaturePara:
	tst.b	Dont_render_Parallax(a6)
	bne	.only_colors

		lea	Natur_Shifter(a6),a4

		lea	NLax_Entry_Tab(pc),a3
		move.w	Natur_AutoScroll(a6),d6

		moveq	#10-1,d7
.Lax_Loop:

		;Softscroll machen
		move	Scr_X_Level_Pos(a6),d0
		add.w	d6,d0
		mulu	NLax_Pos_Val(a3),d0		;Pos*Val/16
		lsr.l	#4,d0
		;Make Lax_Act_Position
		divu	NLax_Pos_Divu(a3),d0		;RoundscrollDivu
		swap	d0			;nur Rest beachten
		neg.w	d0
		move.w	NLax_Max_Hight(a3),d1
.fill_loop:
		move.w	d0,(a4)+
		dbf	d1,.fill_loop

		cmp.w	#6,d7
		bne.s	.no_clear
		moveq	#0,d6
.no_clear:
		;--Adr in Copper schreiben
		addq.l	#NLAX_ENTRYLENGTH,a3
		dbf	d7,.Lax_Loop
.End:
		addq.w	#1,Natur_AutoScroll(a6)

	lea	Natur_Shifter(a6),a0
	move.w	#224*2,d0
	move.w	#$f002,a1
	jsr	AddDMA
	move.b	#$04,DMA_Inc+1(a2)

;-------Copperlist aufbauen------------------------------------------------
	bsr	Create_Natur_Water

	move.l	Natur_Copper_Buffer(a6),a0
	move.l	Copper_List(a6),Natur_Copper_Buffer(a6)
	move.l	a0,Copper_List(a6)

	jsr	Show_WaterSprites
.only_colors:
	lea	NFade_Struktur(a6),a0
	bsr	Call_Transformation2

	rts

Create_Natur_Water:
	move.l	Natur_Copper_Buffer(a6),a0
	move.l	#Copper_InitNature,(a0)+
	lea	Natur_CopperDefault(pc),a1
	lea	NFade_Struktur+Fade_Palette+128(a6),a2

	move.w	Water_YPos(a6),d0			;Y-Pos der Wasser-oberflche.
	sub.w	Scr_Y_Level_Pos(a6),d0
	move.w	d0,Water_SpritePos(a6)
	ble.s	.do_clip

	move.l	#Set_Nothing,NVBL_Handler(a6)

	cmp.w	#223,d0
	blt.s	.no_clip
	bra.s	.no_dark
.do_clip:
	move.l	#NSet_Dark_Color,NVBL_Handler(a6)
.no_dark:
	move.w	#$200,d0
.no_clip:
	move.w	d0,d1
	subq.w	#1,d1
	move.w	d0,d2
	addq.w	#1,d2

	moveq	#7-1,d7
.loop:
	cmp.w	(a1),d1
	beq.s	.only_water
	cmp.w	(a1),d0
	beq.s	.only_water
	cmp.w	(a1),d2
	beq.s	.only_water
	cmp.w	(a1),d0					;ber oder unter der Oberflche?
	bgt.s	.copy_split				;Drber, Split bernehmen.

	move.w	d0,(a0)+				;Wasseroberflche einfgen!
	move.l	#Copper_NatureWater,(a0)+
	move.w	(a2),Natur_Color(a6)
	move.w	#$200,d0
	move.w	#$200,d1
	move.w	#$200,d2
.copy_split:
	move.w	(a1)+,(a0)+
	move.l	(a1)+,(a0)+
.next_split:
	addq.l	#2,a2
	dbf	d7,.loop

	move.w	#-1,(a0)+				;Copperlist abschlieen
	move.l	#Int_Nop,(a0)+
	rts

.only_water:
	move.w	d0,(a0)+				;Wasseroberflche einfgen!
	move.l	#Copper_NatureWaterColor,(a0)+

	move.w	#$200,d0
	move.w	#$200,d1
	move.w	#$200,d2
	addq.l	#6,a1
	bra.s	.next_split

Natur_CopperDefault:
	dc.w	6
	dc.l	Copper_NatureColor
	dc.w	13
	dc.l	Copper_NatureColor
	dc.w	20
	dc.l	Copper_NatureColor
	dc.w	27
	dc.l	Copper_NatureColor
	dc.w	34
	dc.l	Copper_NatureColor
	dc.w	41
	dc.l	Copper_NatureColor
	dc.w	$ff
	dc.l	Int_Nop

;--------------------------------------------------------------------------
		rsreset
NLax_Pos_Val	rs.w	1	;Bere Pos  ScreenPos*Val/16
NLax_Pos_Divu	rs.w	1	;Wie gro ist Loop
NLax_Max_Hight	rs.w	1	;Aktuelle Hhe des Lax
NLAX_ENTRYLENGTH	rs.w	0
NLAX_END	EQU	-1

		rsreset
Lax_Size_Ypos	rs.w	1	;Ypos
Lax_Size_Size	rs.w	1	;Ysize
Lax_Size_Add	rs.l	1	;Add to End

FindLaxOffsetTab	;19 W1
		dc.b	00,00,00,00,00,00,00,00,00,00
		dc.b	00,00,00,00,00,00,00,00,00
		;16 W2
		dc.b	04,04,04,04,04,04,04,04,04,04
		dc.b	04,04,04,04,04,04
		;8  W3
		dc.b	08,08,08,08,08,08,08,08
		;5  W4
		dc.b	12,12,12,12,12
		;35 B1
		dc.b	16,16,16,16,16,16,16,16,16,16
		dc.b	16,16,16,16,16,16,16,16,16,16
		dc.b	16,16,16,16,16,16,16,16,16,16
		dc.b	16,16,16,16,16
		;26 B2
		dc.b	20,20,20,20,20,20,20,20,20,20
		dc.b	20,20,20,20,20,20,20,20,20,20
		dc.b	20,20,20,20,20,20
		;32 B3
		dc.b	24,24,24,24,24,24,24,24,24,24
		dc.b	24,24,24,24,24,24,24,24,24,24
		dc.b	24,24,24,24,24,24,24,24,24,24
		dc.b	24,24
		;11 G1
		dc.b	28,28,28,28,28,28,28,28,28,28
		dc.b	28
		;23 G2
		dc.b	32,32,32,32,32,32,32,32,32,32
		dc.b	32,32,32,32,32,32,32,32,32,32
		dc.b	32,32,32
		;33 G3
		dc.b	36,36,36,36,36,36,36,36,36,36
		dc.b	36,36,36,36,36,36,36,36,36,36
		dc.b	36,36,36,36,36,36,36,36,36,36
		dc.b	36,36,36
		;secu Bytes
		dc.b	36,36,36,36,36,36
		even

NLax_Entry_Tab
		;---------------- LAX 01
		dc.w	12		;Lax_Pos_Val/16
		dc.w	256		;Lax_Pos_Divu/Wort
		dc.w	24-1		;Lax_Max_Hight
		;---------------- LAX 02
		dc.w	06		;Lax_Pos_Val/16
		dc.w	112		;Lax_Pos_Divu/Wort
		dc.w	16-1		;Lax_Max_Hight
		;---------------- LAX 03
		dc.w	03		;Lax_Pos_Val/16
		dc.w	64		;Lax_Pos_Divu/Wort
		dc.w	9-1		;Lax_Max_Hight
		;---------------- LAX 04
		dc.w	01		;Lax_Pos_Val/16
		dc.w	32		;Lax_Pos_Divu/Wort
		dc.w	7-1		;Lax_Max_Hight
		;---------------- LAX 05
		dc.w	02		;Lax_Pos_Val/16
		dc.w	64		;Lax_Pos_Divu/Wort
		dc.w	35-1		;Lax_Max_Hight
		;---------------- LAX 06
		dc.w	03		;Lax_Pos_Val/16
		dc.w	128		;Lax_Pos_Divu/Wort
		dc.w	26-1		;Lax_Max_Hight
		;---------------- LAX 07
		dc.w	04		;Lax_Pos_Val/16
		dc.w	128		;Lax_Pos_Divu/Wort
		dc.w	35-1		;Lax_Max_Hight
		;---------------- LAX 08
		dc.w	06		;Lax_Pos_Val/16
		dc.w	48		;Lax_Pos_Divu/Wort
		dc.w	11-1		;Lax_Max_Hight
		;---------------- LAX 09
		dc.w	09		;Lax_Pos_Val/16
		dc.w	48		;Lax_Pos_Divu/Wort
		dc.w	23-1		;Lax_Max_Hight
		;---------------- LAX 10
		dc.w	14		;Lax_Pos_Val/16
		dc.w	96		;Lax_Pos_Divu/Wort
		dc.w	38-1		;Lax_Max_Hight


;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;	Hinterste Ebene berechnen

;	move.w	#650,Water_YPos(a6)

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;	Wasseroberflche einsortieren.

;	move.w	Water_YPos(a6),d0				;Y-Pos der Wasser-oberflche.
;	sub.w	Scr_Y_Level_Pos(a6),d0
;	move.w	d0,UWaterSpritePos(a6)
;	bgt.s	.check_lower_border
;
;	move.l	#Set_Dark_Color,UVBL_Handler(a6)
;	bra.s	.no_other
;
;.check_lower_border:
;	move.l	#Set_Nothing,UVBL_Handler(a6)
;	cmp.w	#224,d0
;	bge.s	.no_other
;
;	bsr	.insert_split2
;	cmp.w	(a0),d0
;	beq.s	.set_programm
;	move.w	d0,(a0)
;	move.w	#Copper_UnderWater,6(a0)		;Nur Farben umschalten!
;	bra.s	.water_finished
;.set_programm:
;	move.w	#Copper_UnderWaterSplit,6(a0)		;Alles umschalten!
;.water_finished:

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;	Double-Buffern

;	move.l	UCopper_Buffer(a6),a0
;	move.l	Copper_List(a6),UCopper_Buffer(a6)
;	move.l	a0,Copper_List(a6)

;	bsr	Show_WaterSprites

;	rts

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;	HBL-Handler

Copper_NatureWaterColor:
	move.l	Water_Color(a6),$c00004
	move.w	#$2700,sr
	movem.l	a0/d0-d1,-(sp)
	move.l	Natur_Copper_TabPointer(a6),a0
	move.w	(a0)+,Natur_Color(a6)
	move.l	a0,Natur_Copper_TabPointer(a6)
	bra.s	Copper_NatureWaterIn

Copper_NatureWater:
	move.l	Water_Color(a6),$c00004
	move.w	#$2700,sr
	movem.l	a0/d0-d1,-(sp)

Copper_NatureWaterIn:
	lea	$c00004,a0
	move.l	#$c0000080,HBL_Help(a6)
	move.l	#$81348f02,(a0)
	move.l	#$932a9400,(a0)
	move.l	#$95009600+($10000*(NFade_Struktur+Fade_Palette+WorkRam)>>1)&$ff0000+((NFade_Struktur+Fade_Palette+WorkRam)>>9)&$ff,(a0)
	move.w	#$9700+((NFade_Struktur+Fade_Palette+WorkRam)>>17)&$ff,(a0)
	move.w	HBL_Help(a6),(a0)
	move.w	HBL_Help+2(a6),(a0)
	move.w	#$8124,(a0)

	move.l	#$81648700,$c00004

	move.l	#$c02a0000,$c00004
	move.w	Natur_Color(a6),$c00000

	move.l	Copper_Pointer(a6),a0
	move.w	(a0)+,d0			;In Dieser Zeile wird der Nchste Ausgelst!
	move.l	(a0)+,Int_HBlank+2(a6)
	move.l	a0,Copper_Pointer(a6)
	move.w	(a0),d1
	sub.w	d0,d1
	subq.w	#1,d1
	or.w	#$8a00,d1
	move.w	d1,$c00004

	movem.l	(sp)+,a0/d0-d1
	rte

Copper_NatureColor:
	move.w	#$2700,sr
	movem.l	a0/d0,-(sp)

	move.l	Natur_Copper_TabPointer(a6),a0
	move.w	(a0)+,d0
	move.l	a0,Natur_Copper_TabPointer(a6)
	lea	$c00000,a0
.no_hbl:
	btst	#2,5(a0)
	beq.s	.no_hbl

	move.l	#$c02a0000,4(a0)
	move.w	d0,(a0)

	movem.l	(sp)+,a0/d0
	jmp	Get_Next_Copper

Copper_InitNature:
	move.l	Copper_List(a6),a0
	addq.l	#4,a0
	movem.l	a0-a1/d1,-(sp)

	lea	NFade_Struktur+Fade_Palette+130(a6),a0
	move.l	a0,Natur_Copper_TabPointer(a6)

	move.l	NVBL_Handler(a6),a0
	jsr	(a0)

	movem.l	(sp)+,a0-a1/d1
	rts

NSet_Dark_Color:
	lea	$c00004,a0
	move.l	#$c0000080,HBL_Help(a6)
	move.l	#$81748f02,(a0)
	move.l	#$932a9400,(a0)
	move.l	#$95009600+($10000*(NFade_Struktur+Fade_Palette+WorkRam)>>1)&$ff0000+((NFade_Struktur+Fade_Palette+WorkRam)>>9)&$ff,(a0)
	move.w	#$9700+((NFade_Struktur+Fade_Palette+WorkRam)>>17)&$ff,(a0)
	move.w	HBL_Help(a6),(a0)
	move.w	HBL_Help+2(a6),(a0)
	move.w	#$8164,(a0)

;Set_Nothing:
	rts

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;	Parallax Initialisierung

Nature_PBase	= Nature_ParaVRam/32

;-------------- Initialisiert Parallax-Playfield
Init_NatureParallax:
	move	#$8f02,$c00004

	move.l	#$40000010+$00020000,$c00004
	move.w	#$0000,$c00000			;Ypos auf 0 initialisieren.

	move.w	#$2700,sr

	lea	nature_parablock1(pc),a0
	move	#$c000,d0

	moveq	#3-1,d5
	moveq	#1,d6
	moveq	#32-1,d7
	bsr	.set_parablock

	moveq	#2-1,d5
	moveq	#4,d6
	moveq	#14-1,d7
	bsr	.set_parablock

	moveq	#2-1,d5
	moveq	#8,d6
	moveq	#8-1,d7
	bsr	.set_parablock

	moveq	#12-1,d5
	moveq	#3,d6
	moveq	#16-1,d7
	bsr	.set_parablock

	moveq	#10-1,d5
	moveq	#4,d6
	moveq	#12-1,d7
	bsr	.set_parablock

	;Create CopperLists

	lea	Nature_CopperList1(a6),a0
	lea	Nature_CopperList2(a6),a1
	lea	Nature_DefaultList(pc),a2

	moveq	#17,d7
.copyit:
	move.l	(a2),(a0)+
	move.l	(a2)+,(a1)+

	dbf	d7,.copyit

	move.l	#Set_Nothing,NVBL_Handler(a6)

	lea	NFade_Struktur(a6),a0
	lea	Black_Coltab,a1
	lea	Nature_Copcols(pc),a2

	move.w	#71-1,d0
	bsr	Init_Transformation

	move.l	#Init_Natur_Fadeout,Init_ParaFadeOut(a6)

	move.w	#$8b03,$c00004
	move.b	#2,Scr_SplitScroll(a6)		;Kein Splitscroll.

	lea	Main_Rout_Table+4(a6),a0
	lea	MakeNaturePara(pc),a1
	jsr	Insert_Main_Rout

	move.w	#$2300,sr

	move.l	#Nature_CopperList1+WorkRam,Copper_List(a6)
	move.l	#Nature_CopperList2+WorkRam,Natur_Copper_Buffer(a6)

	move.l	#NFade_Struktur+Fade_Palette+64+WorkRam,UnderWaterColors(a6)

	rts

.set_parablock:
	move.w	d7,-(sp)
	move.w	d6,-(sp)
.loopy:
	jsr	SetVRamAdress

	move.w	(sp),d6
.loopm:
	move.l	a0,a1
	move.w	2(sp),d7
.loopx:
	move	(a1)+,d1
	add.w	#Nature_PBase,d1
	move.w	d1,$c00000
	dbf	d7,.loopx
	dbf	d6,.loopm

	adda.w	#32*2,a0
	add	#$80,d0
	dbf	d5,.loopy

	addq.l	#4,sp

	rts

Init_Natur_Fadeout:
	lea	NFade_Struktur(a6),a0
	lea	Nature_Copcols(pc),a1
	lea	Black_Coltab,a2

	move.w	#71-1,d0
	bsr	Init_Transformation
	rts

Nature_Copcols:
	dc.w	$0000,$08CE,$088E,$064A,$0406,$08A6,$0660,$0440
	dc.w	$0CCA,$0CCC,$088C,$000C,$0008,$0AA0,$0A60,$0A00

	dc.w	$0EEA,$00EE,$00AE,$004C,$0008,$0EE8,$0E60,$0C40
	dc.w	$0EEE,$0ECE,$0E8E,$0C0C,$0808,$0EEA,$0ECA,$0EA0

	dc.w	$0000,$0C88,$0ECC,$0846,$000E,$000C,$000A,$0006	;Mr-Nutz
	dc.w	$0000,$0EEE,$0ECC,$0846,$000E,$000C,$000A,$0006

	dc.w	$080E,$0EEE,$0CCC,$0888,$0444,$0000,$00A0,$000E	;Status-Anzeige
	dc.w	$0008,$00EE,$00EA,$00E0,$00C0,$00A0,$0080,$0060

	dc.w	$EEA,$EEA,$EEC,$EEE,$CEE,$AEE,$8EE

Nature_DefaultList:
	dc.l	Copper_InitNature
	dc.w	6
	dc.l	Copper_NatureColor
	dc.w	13
	dc.l	Copper_NatureColor
	dc.w	20
	dc.l	Copper_NatureColor
	dc.w	27
	dc.l	Copper_NatureColor
	dc.w	34
	dc.l	Copper_NatureColor
	dc.w	41
	dc.l	Copper_NatureColor
	dc.w	$ff
	dc.l	Int_Nop

nature_parablock1:	incbin	work:sega/sources/mr_nutz/binary/nature/nature_para.map

	ENDC
*NEONNEONNEONNEONNEONNEON*
